package br.com.sgpv2.service.faixacomparativo;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import br.com.sgpv2.controler.NegocioExeception;
import br.com.sgpv2.entity.faixacomparativo.FaixaComparativo;
import br.com.sgpv2.entity.faixacomparativo.ItemFaixaComparativo;
import br.com.sgpv2.hibernate.faixacomparativo.FaixaComparativoRepository;
import br.com.sgpv2.hibernate.faixacomparativo.ItemFaixaComparativoRepository;

@Service(value = "faixaComparativoService")
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public class FaixaComparativoServiceImpl implements FaixaComparativoService {

	FaixaComparativoRepository faixaComparativoRepository;
	ItemFaixaComparativoRepository itemFaixaComparativoRepository;

	/** {@inheritDoc} */
	@Override
	@Transactional
	public void alterar(FaixaComparativo faixaComparativo)
			throws NegocioExeception {
		faixaComparativoRepository
				.exluirItensFaixaComparativo(faixaComparativo);

		for (ItemFaixaComparativo item : faixaComparativo
				.getItensFaixaComparativo()) {
			itemFaixaComparativoRepository.salvar(item);
		}

		faixaComparativoRepository.alterar(faixaComparativo);
	}

	/** {@inheritDoc} */
	@Override
	public FaixaComparativo buscar(Integer pk) throws NegocioExeception {
		return faixaComparativoRepository.buscar(pk);
	}

	/** {@inheritDoc} */
	@Override
	public List<FaixaComparativo> listar() throws Exception {
		return faixaComparativoRepository.listar();
	}

	/** {@inheritDoc} */
	@Override
	public void remover(FaixaComparativo faixaComparativo) throws Exception {
		faixaComparativoRepository.excluir(faixaComparativo);
	}

	/** {@inheritDoc} */
	@Override
	public void salvar(FaixaComparativo faixaComparativo) throws Exception {
		faixaComparativoRepository.salvar(faixaComparativo);
	}

	/** {@inheritDoc} */
	@Override
	public void saveOrUpdate(FaixaComparativo faixaComparativo) {
		faixaComparativoRepository.saveOrUpdate(faixaComparativo);
	}

	public FaixaComparativoRepository getFaixaComparativoRepository() {
		return faixaComparativoRepository;
	}

	/**
	 * Configura o DAO de faixa de comparativo.
	 */
	@Autowired
	public void setFaixaComparativoRepository(
			FaixaComparativoRepository faixaComparativoRepository) {
		this.faixaComparativoRepository = faixaComparativoRepository;
	}

	public List<FaixaComparativo> consultarPorDescricao(String descricao) {
		return this.faixaComparativoRepository.consultarPorDescricao(descricao);
	}

	/**
	 * Configura o DAO de faixa de comparativo.
	 */
	@Autowired
	public void setItemFaixaComparativoRepository(
			ItemFaixaComparativoRepository itemFaixaComparativoRepository) {
		this.itemFaixaComparativoRepository = itemFaixaComparativoRepository;
	}

	@Override
	public List<FaixaComparativo> consultarFaixasComparativoPorFiltro(
			String descricao) {
		return this.faixaComparativoRepository
				.consultarFaixasComparativoPorFiltro(descricao);
	}
}
